В этом шаге мы, наконец-то выберемся за пределы 2D и сможем покруться в свое удовольствие.
Как обычно, создадим новый проект с именем RotTriQuad, скопируем туда файл из ColorTriQuad(предыдущий проект), переименуем этот файл и настроим проект.
Все изменения опять будут только в функции Draw(), но понадобится добавить парочку глобальных переменных Trot и Qrot, это углы поворота для треугольника и для квадрата соответственно.
GLfloat Trot;
GLfloat Qrot;
GLvoid Draw(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5f, 0.0f, -5.0f);
glRotatef(Trot, 1.0f, 1.0f, 1.0f); // вот тут весь секрет
// Функция glRotate выполняет вращение текущей матрицы на угол,
// указанный первым аргументом и делает это вокруг осей,
//заданных 2-м, 3-м, 4-м аргументами, т.е. вокруг x,y,z.
// Принципиальное значение имеет последовательность функций
// glRotatef(:)
// glTranslatef(:)
// или
// glTranslatef(:)
// glRotatef(:)
// попробуйте поменять их местами
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glEnd();
glLoadIdentity(); // не забудьте привести матрицу,
//а то квадратик вокруг треугольничка поедет ;)
glTranslatef(1.5f, 0.0f, -5.0f);
glRotatef(Qrot, 1.0f, 1.0f, 1.0f);
glColor3f(0.3f, 0.2f, 0.4f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd();
Trot += 0.3f;
Qrot -= 0.3f;
}
Вот так вот. Это называеся танец примитивов ;)
На этом шаге стоит остановиться и провести время экспериментируя с функциями glTranslatef, glRotatef и glScale(ее нет в это примере, но я думаю понятно из названия, что она меняет масштаб).
Для всех геометрических преобразований мы будем в основном использовать эти функции, поэтому от понимания их работы и взаимодействия друг с другом зависит будущее наших шагов ;)
Возможно, что придется немного посидеть с карандашиком и листом бумаги, но это только на пользу (я вот недавно узнал, что писать руками очень трудно, и как я это в школе делал не понимаю).
Теперь пришло время из плоских фигур сделать объемные. Проходите, проходите дальше. Не задерживайтесь в дверях.